/*******************************************************************************
  * 文件：Display.h
  * 作者：djy
  * 版本：v1.0.0
  * 日期：2024.02.18
  * 说明：显示驱动程序
******************************************************************************/
#include "Display.h"
#include "TM1620.h"
#include <string.h>

/* 变量定义 *********************************************************************/
volatile static DisplayRegData_ts sDisplayRegData; // 写入显示寄存器的数据
// 数码管共阴极段选表：
// [0:9]:0-9，[10]:熄灭，[11]:E,[12]:r,[13]:n,[14]:d,[15]:P,[16]:H,[17]:L,[18]:o,[19]:I
// [20]:A,[21]:u,[22]:t,[23]:F,[24]:U,[25]:-,[26]:||,[27]:无锅
const static U8 au8SegData[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,
                                0x79,0x50,0x54,0x5e,0x73,0x76,0x38,0x5c,0x06,0x77,0x1C,
                                0x78,0x71,0x3e,0x40,0x36,0x6a};


/* 宏定义 *********************************************************************/

// 炉头1区数码管档位段选定义
#define LED1_SEG1       sDisplayRegData.uGrid4_06_Byte.sGRIDx.bSEG1
#define LED1_SEG2       sDisplayRegData.uGrid4_06_Byte.sGRIDx.bSEG2
#define LED1_SEG3       sDisplayRegData.uGrid4_06_Byte.sGRIDx.bSEG3
#define LED1_SEG4       sDisplayRegData.uGrid4_06_Byte.sGRIDx.bSEG4
#define LED1_SEG5       sDisplayRegData.uGrid4_06_Byte.sGRIDx.bSEG5
#define LED1_SEG6       sDisplayRegData.uGrid4_06_Byte.sGRIDx.bSEG6
#define LED1_SEG7       sDisplayRegData.uGrid4_06_Byte.sGRIDx.bSEG7
#define LED1_SEG8       sDisplayRegData.uGrid4_06_Byte.sGRIDx.bSEG8

// 炉头2区数码管档位段选定义
#define LED2_SEG1       sDisplayRegData.uGrid3_04_Byte.sGRIDx.bSEG1
#define LED2_SEG2       sDisplayRegData.uGrid3_04_Byte.sGRIDx.bSEG2
#define LED2_SEG3       sDisplayRegData.uGrid3_04_Byte.sGRIDx.bSEG3
#define LED2_SEG4       sDisplayRegData.uGrid3_04_Byte.sGRIDx.bSEG4
#define LED2_SEG5       sDisplayRegData.uGrid3_04_Byte.sGRIDx.bSEG5
#define LED2_SEG6       sDisplayRegData.uGrid3_04_Byte.sGRIDx.bSEG6
#define LED2_SEG7       sDisplayRegData.uGrid3_04_Byte.sGRIDx.bSEG7
#define LED2_SEG8       sDisplayRegData.uGrid3_04_Byte.sGRIDx.bSEG8

// 炉头3区数码管档位段选定义
#define LED3_SEG1       sDisplayRegData.uGrid2_02_Byte.sGRIDx.bSEG1
#define LED3_SEG2       sDisplayRegData.uGrid2_02_Byte.sGRIDx.bSEG2
#define LED3_SEG3       sDisplayRegData.uGrid2_02_Byte.sGRIDx.bSEG3
#define LED3_SEG4       sDisplayRegData.uGrid2_02_Byte.sGRIDx.bSEG4
#define LED3_SEG5       sDisplayRegData.uGrid2_02_Byte.sGRIDx.bSEG5
#define LED3_SEG6       sDisplayRegData.uGrid2_02_Byte.sGRIDx.bSEG6
#define LED3_SEG7       sDisplayRegData.uGrid2_02_Byte.sGRIDx.bSEG7
#define LED3_SEG8       sDisplayRegData.uGrid2_02_Byte.sGRIDx.bSEG8

// 炉头4区数码管档位段选定义
#define LED4_SEG1       sDisplayRegData.uGrid1_00_Byte.sGRIDx.bSEG1
#define LED4_SEG2       sDisplayRegData.uGrid1_00_Byte.sGRIDx.bSEG2
#define LED4_SEG3       sDisplayRegData.uGrid1_00_Byte.sGRIDx.bSEG3
#define LED4_SEG4       sDisplayRegData.uGrid1_00_Byte.sGRIDx.bSEG4
#define LED4_SEG5       sDisplayRegData.uGrid1_00_Byte.sGRIDx.bSEG5
#define LED4_SEG6       sDisplayRegData.uGrid1_00_Byte.sGRIDx.bSEG6
#define LED4_SEG7       sDisplayRegData.uGrid1_00_Byte.sGRIDx.bSEG7
#define LED4_SEG8       sDisplayRegData.uGrid1_00_Byte.sGRIDx.bSEG8

// 时间区域段选定义
// 十位
#define LED_TEN_SEG1    sDisplayRegData.uGrid6_0A_Byte.sGRIDx.bSEG1
#define LED_TEN_SEG2    sDisplayRegData.uGrid6_0A_Byte.sGRIDx.bSEG2
#define LED_TEN_SEG3    sDisplayRegData.uGrid6_0A_Byte.sGRIDx.bSEG3
#define LED_TEN_SEG4    sDisplayRegData.uGrid6_0A_Byte.sGRIDx.bSEG4
#define LED_TEN_SEG5    sDisplayRegData.uGrid6_0A_Byte.sGRIDx.bSEG5
#define LED_TEN_SEG6    sDisplayRegData.uGrid6_0A_Byte.sGRIDx.bSEG6
#define LED_TEN_SEG7    sDisplayRegData.uGrid6_0A_Byte.sGRIDx.bSEG7
#define LED_TEN_SEG8    sDisplayRegData.uGrid6_0A_Byte.sGRIDx.bSEG8
// 个位
#define LED_UNIT_SEG1   sDisplayRegData.uGrid5_08_Byte.sGRIDx.bSEG1
#define LED_UNIT_SEG2   sDisplayRegData.uGrid5_08_Byte.sGRIDx.bSEG2
#define LED_UNIT_SEG3   sDisplayRegData.uGrid5_08_Byte.sGRIDx.bSEG3
#define LED_UNIT_SEG4   sDisplayRegData.uGrid5_08_Byte.sGRIDx.bSEG4
#define LED_UNIT_SEG5   sDisplayRegData.uGrid5_08_Byte.sGRIDx.bSEG5
#define LED_UNIT_SEG6   sDisplayRegData.uGrid5_08_Byte.sGRIDx.bSEG6
#define LED_UNIT_SEG7   sDisplayRegData.uGrid5_08_Byte.sGRIDx.bSEG7
#define LED_UNIT_SEG8   sDisplayRegData.uGrid5_08_Byte.sGRIDx.bSEG8

/*******************************************************************************
  * 函数名:    Display_HobDot
  * 功  能  ：CZ Dot显示
  * 参  数  ：U8 u8CZIndex: 炉头索引 Bool bState：开关状态
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_HobDot(U8 u8CZIndex,Bool bState)
{
    switch(u8CZIndex)
    {
    case 0:
        if(bState)
        {
            LED1_SEG8 = 1;
        }
        else
        {
            LED1_SEG8 = 0;
        }

        TM1629_WriteDisplayByte(0x06,(U8)sDisplayRegData.uGrid4_06_Byte.u8Byte);
    break;
    case 1:
        if(bState)
        {
            LED2_SEG8 = 1;
        }
        else
        {
            LED2_SEG8 = 0;
        }

        TM1629_WriteDisplayByte(0x04,(U8)sDisplayRegData.uGrid3_04_Byte.u8Byte);
    break;
    case 2:
        if(bState)
        {
            LED3_SEG8 = 1;
        }
        else
        {
            LED3_SEG8 = 0;
        }

        TM1629_WriteDisplayByte(0x02,(U8)sDisplayRegData.uGrid2_02_Byte.u8Byte);
    break;
    case 3:
        if(bState)
        {
            LED4_SEG8 = 1;
        }
        else
        {
            LED4_SEG8 = 0;
        }

        TM1629_WriteDisplayByte(0x00,(U8)sDisplayRegData.uGrid1_00_Byte.u8Byte);
    break;
    default:
        LED1_SEG8 = 0;
        LED2_SEG8 = 0;
        LED3_SEG8 = 0;
        LED4_SEG8 = 0;
        TM1629_WriteDisplayByte(0x06,(U8)sDisplayRegData.uGrid4_06_Byte.u8Byte);
        TM1629_WriteDisplayByte(0x04,(U8)sDisplayRegData.uGrid3_04_Byte.u8Byte);
        TM1629_WriteDisplayByte(0x02,(U8)sDisplayRegData.uGrid2_02_Byte.u8Byte);
        TM1629_WriteDisplayByte(0x00,(U8)sDisplayRegData.uGrid1_00_Byte.u8Byte);
    break;
    }

}

/*******************************************************************************
  * 函数名  ：Display_Hob1Gear
  * 功  能  ：炉头1档位显示
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob1Gear(U8 u8Gear)
{
    U8 u8Code;
    
    if(u8Gear <= 9)
    {
        // 显示0-9档
        u8Code = au8SegData[u8Gear];
    }
    else if(u8Gear == 10)
    {
        // Boost档位显示P
        u8Code = au8SegData[15];
    }
    else
    {
        // 关闭显示
        u8Code = au8SegData[10];
    }
    
    LED1_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x06,(U8)sDisplayRegData.uGrid4_06_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob1Gear
  * 功  能  ：炉头2档位显示
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob2Gear(U8 u8Gear)
{
    U8 u8Code;
    
    if(u8Gear <= 9)
    {
        // 显示0-9档
        {u8Code = au8SegData[u8Gear];}
    }
    else if(u8Gear == 10)
    {
        // Boost档位显示P
        u8Code = au8SegData[15];
    }
    else
    {
        // 关闭显示
        u8Code = au8SegData[10];
    }
    
    LED2_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x04,(U8)sDisplayRegData.uGrid3_04_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob3Gear
  * 功  能  ：炉头3档位显示
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob3Gear(U8 u8Gear)
{
    U8 u8Code;
    
    if(u8Gear <= 9)
    {
        // 显示0-9档
        {u8Code = au8SegData[u8Gear];}
    }
    else if(u8Gear == 10)
    {
        // Boost档位显示P
        u8Code = au8SegData[15];
    }
    else
    {
        // 关闭显示
        u8Code = au8SegData[10];
    }
    
    LED3_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x02,(U8)sDisplayRegData.uGrid2_02_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob4Gear
  * 功  能  ：炉头4档位显示
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob4Gear(U8 u8Gear)
{
    U8 u8Code;
    
    if(u8Gear <= 9)
    {
        // 显示0-9档
        {u8Code = au8SegData[u8Gear];}
    }
    else if(u8Gear == 10)
    {
        // Boost档位显示P
        u8Code = au8SegData[15];
    }
    else
    {
        // 关闭显示
        u8Code = au8SegData[10];
    }
    
    LED4_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x00,(U8)sDisplayRegData.uGrid1_00_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob1Idle
  * 功  能  ：炉头1显示空闲
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob1Idle(void)
{
    U8 u8Code;
    u8Code = au8SegData[25];
    
    LED1_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x06,(U8)sDisplayRegData.uGrid4_06_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob2Idle
  * 功  能  ：炉头2显示空闲
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob2Idle(void)
{
    U8 u8Code;
    u8Code = au8SegData[25];
    
    LED2_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x04,(U8)sDisplayRegData.uGrid3_04_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob3Idle
  * 功  能  ：炉头3显示空闲
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob3Idle(void)
{
    U8 u8Code;
    u8Code = au8SegData[25];
    
    LED3_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x02,(U8)sDisplayRegData.uGrid2_02_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob4Idle
  * 功  能  ：炉头4显示空闲
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob4Idle(void)
{
    U8 u8Code;
    u8Code = au8SegData[25];

    LED4_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x00,(U8)sDisplayRegData.uGrid1_00_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob1Hot
  * 功  能  ：炉头1显示余热
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob1Hot(void)
{
    U8 u8Code;
    u8Code = au8SegData[16];
    
    LED1_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x06,(U8)sDisplayRegData.uGrid4_06_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob2Hot
  * 功  能  ：炉头2显示余热
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob2Hot(void)
{
    U8 u8Code;
    u8Code = au8SegData[16];
    
    LED2_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x04,(U8)sDisplayRegData.uGrid3_04_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob3Hot
  * 功  能  ：炉头3显示余热
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob3Hot(void)
{
    U8 u8Code;
    u8Code = au8SegData[16];
    
    LED3_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x02,(U8)sDisplayRegData.uGrid2_02_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob4Hot
  * 功  能  ：炉头4显示余热
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob4Hot(void)
{
    U8 u8Code;
    u8Code = au8SegData[16];

    LED4_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x00,(U8)sDisplayRegData.uGrid1_00_Byte.u8Byte);
}

// 显示炉头1暂停
void Display_Hob1Pause(void)
{
    U8 u8Code;
    u8Code = au8SegData[26];
    
    LED1_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x06,(U8)sDisplayRegData.uGrid4_06_Byte.u8Byte);
}

// 显示炉头2暂停
void Display_Hob2Pause(void)
{
    U8 u8Code;
    u8Code = au8SegData[26];
    
    LED2_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x04,(U8)sDisplayRegData.uGrid3_04_Byte.u8Byte);
}

// 显示炉头3暂停
void Display_Hob3Pause(void)
{
    U8 u8Code;
    u8Code = au8SegData[26];
    
    LED3_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x02,(U8)sDisplayRegData.uGrid2_02_Byte.u8Byte);
}

// 显示炉头4暂停
void Display_Hob4Pause(void)
{
    U8 u8Code;
    u8Code = au8SegData[26];

    LED4_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x00,(U8)sDisplayRegData.uGrid1_00_Byte.u8Byte);
}

// 显示炉头1无锅
void Display_Hob1NoPot(void)
{
    U8 u8Code;
    u8Code = au8SegData[27];
    
    LED1_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED1_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x06,(U8)sDisplayRegData.uGrid4_06_Byte.u8Byte);
}

// 显示炉头2无锅
void Display_Hob2NoPot(void)
{
    U8 u8Code;
    u8Code = au8SegData[27];
    
    LED2_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED2_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x04,(U8)sDisplayRegData.uGrid3_04_Byte.u8Byte);  
}

// 显示炉头3无锅
void Display_Hob3NoPot(void)
{
    U8 u8Code;
    u8Code = au8SegData[27];

    LED3_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED3_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x02,(U8)sDisplayRegData.uGrid2_02_Byte.u8Byte);
}

// 显示炉头4无锅
void Display_Hob4NoPot(void)
{
    U8 u8Code;
    u8Code = au8SegData[27];

    LED4_SEG1 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG2 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG3 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG4 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG5 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG6 = u8Code&0x01;
    u8Code >>= 1;
    LED4_SEG7 = u8Code&0x01;
    u8Code >>= 1;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x00,(U8)sDisplayRegData.uGrid1_00_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Time
  * 功  能  ：时间二位LED数码管显示
  * 参  数  ：U8 u8Time:时间
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_ShowTime(U8 u8Time)
{
    U8 u8TenCode;
    U8 u8UnitCode;
    
    if(u8Time <= 99)
    {
        // 显示时间
        u8TenCode = au8SegData[u8Time/10];
        u8UnitCode = au8SegData[u8Time%10];
    }
    else
    {
        // 关闭显示
        u8TenCode = au8SegData[10];
        u8UnitCode = au8SegData[10];
    }

    // 十位显示
    LED_TEN_SEG1 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG2 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG3 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG4 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG5 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG6 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG7 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG8 = u8TenCode&0x01;

    // 个位显示
    LED_UNIT_SEG1 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG2 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG3 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG4 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG5 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG6 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG7 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG8 = u8UnitCode&0x01;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x08,(U8)sDisplayRegData.uGrid5_08_Byte.u8Byte);
    TM1629_WriteDisplayByte(0x0A,(U8)sDisplayRegData.uGrid6_0A_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_showAll
  * 功  能  ：所有数码管都亮起，包括四个炉头档位以及一个两位时间显示
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_ShowAll(void)
{
    Display_Hob1Gear(8);        // 炉头一 档位显示 8 
    Display_Hob2Gear(8);        // 炉头二 档位显示 8 
    Display_Hob3Gear(8);        // 炉头三 档位显示 8 
    Display_Hob4Gear(8);        // 炉头四 档位显示 8 
    Display_ShowTime(88);                  // 两位时间数码管显示 88 
}

/*******************************************************************************
  * 函数名  ：Display_ClearSMG
  * 功  能  ：数码管清空数码管显示
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_ClearAll(void)
{
    memset((void *)&sDisplayRegData,0x00,sizeof(sDisplayRegData));
    
    TM1629_WriteDisplayByte(0x00,0x00);
    TM1629_WriteDisplayByte(0x02,0x00);
    TM1629_WriteDisplayByte(0x04,0x00);
    TM1629_WriteDisplayByte(0x06,0x00);
    TM1629_WriteDisplayByte(0x08,0x00);
    TM1629_WriteDisplayByte(0x0A,0x00);
}

/*******************************************************************************
  * 函数名  ：Display_Hob1Clear
  * 功  能  ：炉头1显示清空
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob1Clear(void)
{
    LED1_SEG1 = 0x00;
    LED1_SEG2 = 0x00;
    LED1_SEG3 = 0x00;
    LED1_SEG4 = 0x00;
    LED1_SEG5 = 0x00;
    LED1_SEG6 = 0x00;
    LED1_SEG7 = 0x00;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x06,(U8)sDisplayRegData.uGrid4_06_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob2Clear
  * 功  能  ：炉头2显示清空
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob2Clear(void)
{
    LED2_SEG1 = 0x00;
    LED2_SEG2 = 0x00;
    LED2_SEG3 = 0x00;
    LED2_SEG4 = 0x00;
    LED2_SEG5 = 0x00;
    LED2_SEG6 = 0x00;
    LED2_SEG7 = 0x00;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x04,(U8)sDisplayRegData.uGrid3_04_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob3Clear
  * 功  能  ：炉头3显示清空
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob3Clear(void)
{
    LED3_SEG1 = 0x00;
    LED3_SEG2 = 0x00;
    LED3_SEG3 = 0x00;
    LED3_SEG4 = 0x00;
    LED3_SEG5 = 0x00;
    LED3_SEG6 = 0x00;
    LED3_SEG7 = 0x00;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x02,(U8)sDisplayRegData.uGrid2_02_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Hob4Clear
  * 功  能  ：炉头4显示清空
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Hob4Clear(void)
{
    LED4_SEG1 = 0x00;
    LED4_SEG2 = 0x00;
    LED4_SEG3 = 0x00;
    LED4_SEG4 = 0x00;
    LED4_SEG5 = 0x00;
    LED4_SEG6 = 0x00;
    LED4_SEG7 = 0x00;

    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x00,(U8)sDisplayRegData.uGrid1_00_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_ShowTimeIdle
  * 功  能  ：数码管显示时间空闲
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_ShowIdle(void)
{
    U8 u8TenCode;
    U8 u8UnitCode;

    // 传入空闲符号
    u8TenCode = au8SegData[25];
    u8UnitCode = au8SegData[25];    

    // 十位显示
    LED_TEN_SEG1 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG2 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG3 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG4 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG5 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG6 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG7 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG8 = u8TenCode&0x01;

    // 个位显示
    LED_UNIT_SEG1 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG2 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG3 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG4 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG5 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG6 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG7 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG8 = u8UnitCode&0x01;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x08,(U8)sDisplayRegData.uGrid5_08_Byte.u8Byte);
    TM1629_WriteDisplayByte(0x0A,(U8)sDisplayRegData.uGrid6_0A_Byte.u8Byte);
} 

/*******************************************************************************
  * 函数名  ：Display_ShowLock
  * 功  能  ：数码管显示童锁Lo
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_ShowLock(void)
{
    U8 u8TenCode;
    U8 u8UnitCode;

    // 传入空闲符号
    u8TenCode = au8SegData[17];
    u8UnitCode = au8SegData[18];    

    // 十位显示
    LED_TEN_SEG1 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG2 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG3 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG4 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG5 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG6 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG7 = u8TenCode&0x01;
    u8TenCode >>= 1;
    LED_TEN_SEG8 = u8TenCode&0x01;

    // 个位显示
    LED_UNIT_SEG1 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG2 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG3 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG4 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG5 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG6 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG7 = u8UnitCode&0x01;
    u8UnitCode >>= 1;
    LED_UNIT_SEG8 = u8UnitCode&0x01;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x08,(U8)sDisplayRegData.uGrid5_08_Byte.u8Byte);
    TM1629_WriteDisplayByte(0x0A,(U8)sDisplayRegData.uGrid6_0A_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_ShowTimeClear
  * 功  能  ：数码管时间显示部分清除熄灭
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_ClearTime(void)
{
    // 十位显示
    LED_TEN_SEG1 = 0x00;
    LED_TEN_SEG2 = 0x00;
    LED_TEN_SEG3 = 0x00;
    LED_TEN_SEG4 = 0x00;
    LED_TEN_SEG5 = 0x00;
    LED_TEN_SEG6 = 0x00;
    LED_TEN_SEG7 = 0x00;
    LED_TEN_SEG8 = 0x00;

    // 个位显示
    LED_UNIT_SEG1 = 0x00;
    LED_UNIT_SEG2 = 0x00;
    LED_UNIT_SEG3 = 0x00;
    LED_UNIT_SEG4 = 0x00;
    LED_UNIT_SEG5 = 0x00;
    LED_UNIT_SEG6 = 0x00;
    LED_UNIT_SEG7 = 0x00;
    LED_UNIT_SEG8 = 0x00;
    
    // 将显示数据写入驱动芯片
    TM1629_WriteDisplayByte(0x08,(U8)sDisplayRegData.uGrid5_08_Byte.u8Byte);
    TM1629_WriteDisplayByte(0x0A,(U8)sDisplayRegData.uGrid6_0A_Byte.u8Byte);
}

/*******************************************************************************
  * 函数名  ：Display_Init
  * 功  能  ：显示初始化
  * 参  数  ：无
  * 返回值  ：无
  * 说  明  ：无
*******************************************************************************/
void Display_Init(void)
{
    // 初始化TM1629芯片
    TM1629_Init();
    
    // 上电显示寄存器清零
    Display_ClearAll();
}

